74500e
@@ -29,6 +29,7 @@
import javax.servlet.http.HttpServletResponseWrapper;
 
 import org.springframework.http.HttpMethod;
 import org.springframework.util.Assert;
+import org.springframework.util.ClassUtils;
 import org.springframework.util.DigestUtils;
 import org.springframework.util.ResizableByteArrayOutputStream;
 import org.springframework.util.StreamUtils;
@@ -60,6 +61,11 @@
public class ShallowEtagHeaderFilter extends OncePerRequestFilter {
 	private static final String DIRECTIVE_NO_STORE = "no-store";
 
 
+	/** Checking for Servlet 3.0+ HttpServletResponse.getHeader(String) */
+	private static final boolean responseGetHeaderAvailable =
+			ClassUtils.hasMethod(HttpServletResponse.class, "getHeader", String.class);
+
+
 	/**
 	 * The default value is "false" so that the filter may delay the generation of
 	 * an ETag until the last asynchronously dispatched thread.
@@ -150,7 +156,7 @@
public class ShallowEtagHeaderFilter extends OncePerRequestFilter {
 
 		if (responseStatusCode >= 200 && responseStatusCode < 300 &&
 				HttpMethod.GET.name().equals(request.getMethod())) {
-			String cacheControl = response.getHeader(HEADER_CACHE_CONTROL);
+			String cacheControl = (responseGetHeaderAvailable ? response.getHeader(HEADER_CACHE_CONTROL) : null);
 			if (cacheControl == null || !cacheControl.contains(DIRECTIVE_NO_STORE)) {
 				return true;
 			}
